<?php
/**
 * <i>@layout</i>组件
 * 
 * 根据条件判断是否显示内容
 * 
 * 可以使用的参数有：
 * - x-layout string 布局模板
 * - [x-format] string 布局模板文档格式:xml,html
 * 
 * 示例：
 * <code>
 * <div com="@layout" x-layout="layout" x-format="html">
 * 	<ul com="@foreach" x-data-set="$array" x-value="$value">
 * 		<li>{$value}</li>
 * 	</ul>
 * </div>
 * </code>
 *
 * @version $Id: IMintLayoutComponent.php 312 2008-04-23 16:29:38Z iwind $
 * @package util.mint.component
 * @since 0.0.3
 */
class IMintLayoutComponent extends IAbstractMintComponent {
	/**
	 * 取得支持的参数列表
	 *
	 * @return array
	 */	
	public function getSupportedParameters() {
		return array("x-layout", "x-format");
	}
	
	/**
	 * 取得HTML属性映射
	 *
	 * @return array
	 * @since 0.0.3
	 */		
	public function getHtmlAttrMapping() {
		return array();
	}	
	
	/**
	 * 处理组件
	 *
	 * @return boolean
	 */	
	public function processComponent() {
		$parameters = $this->getParameters();
		
		if (!isset($parameters["x-layout"])) {
			$this->throwUndefinedValueException("x-layout");
			return false;
		}
		$xLayout = $parameters["x-layout"];
		
		if (!isset($parameters["x-format"])) {
			$format = IMintConfig::HTML_FORMAT;
		}
		else {
			$xFormat = $parameters["x-format"];
			if (isset(IMintConfig::$formatTexts[$xFormat])) {
				$format = IMintConfig::$formatTexts[$xFormat];
			}
			else {
				$this->throwUnavailableException("x-format", $xFormat);
			}
		}
		$file = IMint::getFile($xLayout, $format);
		$this->getTemplate()->addObservedFile($file);
		$contents = $file->getReader()->read();
		$pieces = explode("{\$layout:MAIN}", $contents, 2);
		if (isset($pieces[0])) {
			$this->addFirstChildText($pieces[0]);
		}
		if (isset($pieces[1])) {
			$this->addLastChildText($pieces[1]);
		}
		$this->removeNode();
		return true;
	}
}

?>